﻿using stirling_chillers.Data;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace stirling_chillers.Services
{
    /// <summary>
    /// 认证服务实现
    /// </summary>
    public class AuthService : IAuthService
    {
        private readonly IUserRepository _userRepository;

        /// <summary>
        /// 构造函数注入用户数据访问服务
        /// </summary>
        public AuthService(IUserRepository userRepository)
        {
            _userRepository = userRepository;
        }

        /// <summary>
        /// 用户登录
        /// </summary>
        public async Task<(bool Success, string Message)> LoginAsync(string username, string password)
        {
            // 查找用户
            var user = await _userRepository.GetUserByUsernameAsync(username);

            // 检查用户是否存在
            if (user == null)
            {
                return (false, "用户名不存在");
            }

            // 检查账号是否激活
            if (user.Status != 1)
            {
                return (false, "账号已被禁用，请联系管理员");
            }

            // 验证密码
            if (!VerifyPassword(password, user.Password))
            {
                return (false, "密码错误");
            }

            // 登录成功
            return (true, "登录成功");
        }

        /// <summary>
        /// 验证密码
        /// </summary>
        private bool VerifyPassword(string password, string storedHash)
        {
            // 实际项目中应该使用更安全的哈希算法，如BCrypt
            // 这里为了演示使用简单的MD5哈希（不推荐在生产环境使用）
            //using (var md5 = MD5.Create())
            //{
            //    var inputBytes = Encoding.UTF8.GetBytes(password);
            //    var hashBytes = md5.ComputeHash(inputBytes);

            //    // 将字节转换为十六进制字符串
            //    var passwordHash = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

            //    return passwordHash == storedHash;
            //}

            return password == storedHash;
        }
    }
}
